# -*- coding=utf-8 -*-
# 机器学习 1


def estimate_house_sales_price(num_of_bedrooms, area, neighborhood):
    """
    计算房价
    :param num_of_bedrooms: 房间数
    :param area:            面积
    :param neighborhood:    地段
    :return:
    """
    price = 0
    # 一小撮这个
    price += num_of_bedrooms * .841231951398213

    # 一大撮那个
    price += area * 1231.1231231

    # 或许再加一把这个
    price += neighborhood * 2.3242341421

    # 最后，再多加一点点盐
    price += 201.23432095

    return price


# step1 将每个权重都设为 1.0
def estimate_house_sales_price(num_of_bedrooms, area, neighborhood, weight=1.0):
    """
    计算房价
    :param num_of_bedrooms: 房间数
    :param area:            面积
    :param neighborhood:    地段
    :param weight:          权重
    :return:
    """
    price = 0
    # 一小撮这个
    price += num_of_bedrooms * weight

    # 一大撮那个
    price += area * weight

    # 或许再加一把这个
    price += neighborhood * weight

    # 最后，再多加一点点盐
    price += weight

    return price


# step2
# 将你知道的每栋房产的数据代入函数进行运算，检验估算值与正确价格的偏离程度：
# 比如说，如果第一套房产实际成交价为 25 万美元，你的函数估价为 17.8 万美元，这一套房产你就差了 7.2 万。
# 现在，将你的数据集中的每套房产估价偏离值平方后求和。
# 假设你的数据集中交易了 500 套房产，估价偏离值平方求和总计为 86,123,373 美元。
# 这个数字就是你的函数现在的「错误」程度。
# 现在，将总和除以 500，得到每套房产的估价偏差的平均值。将这个平均误差值称为你函数的代价（cost）。
# 如果你能通过调整权重，使得这个代价变为 0，你的函数就完美了。

# step3
# 通过尝试所有可能的权重值组合，不断重复第二步。哪一个权重组合的代价最接近于 0，你就使用哪个。
# 当你找到了合适的权重值，你就解决了问题!

# 代价函数（Cost Function）。
